#ifndef __EXCEPTIONS__
#define __EXCEPTIONS__

#include <exception>
#include <string>
#include <inttypes.h>

using namespace std;

class MemoryException : public exception
{
public:
  MemoryException (uint16_t address);

  virtual const char* what () const throw ();

private:
  uint16_t _address;
};

class SpecException : public exception
{
public:
  virtual const char* what () const throw ();
};

class CoreException : public exception
{
public:
  CoreException (uint16_t address, uint16_t op);

  virtual const char* what () const throw ();

private:
  uint16_t _address;
  uint16_t _op;
};

class IndexException : public exception
{
public:
  virtual const char* what () const throw ();
};

#endif /* __EXCEPTIONS__ */
